{FlexCat

{Den flexibla kataloggeneratorn

{

{Version 2.0

Jochen Wiedmann och Marcin Orlowski

Tillst�nd har utf�rdats f�r att g�ra och distribuera exakta kopior av den h�r manual och av programmet FlexCat.

F�rfattaren utf�rdar inga som helst garantier f�r att programmet som beskrivs i denna dokumentation, samt resultatet fr�n programmet, �r korrekta. F�rfattaren kan inte h�llas ansvarig f�r n�gra skador som h�rr�r fr�n anv�ndadet av denna mjukvara.


\input texinfo

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1 �versikt

I och med OS 2.1 erbjuder Amigan ett trevligt system f�r att anv�nda program p� olika spr�k: locale.library. (Detta kallas att lokalisera programmet; det �r vad namnet st�r f�r.)

Id�n �r enkel: Du v�ljer ett spr�k - engelska f�r det mesta - och skriver ditt program p� samma s�tt som du gjorde utan lokalisering, f�rutom att konstanta str�ngar ers�tts av vissa speciella funktionsanrop. Ett annat funktionsanrop g�r det m�jligt f�r anv�ndaren att v�lja ett annat spr�k n�r programmet k�rs. (Det senare funktionsanropet l�ser in en extern fil, den s� kallade katalogen, och g�r att den ovan n�mnda funktionen l�ser str�ngarna fr�n katalogen ist�llet f�r att anv�nda de f�rdefinierade str�ngarna.)

Dessa kataloger �r oberoende av programmet. Allt du beh�ver f�r att l�gga till ett annat spr�k �r att skapa en ny katalogfil, och detta kan g�ras n�r som helst, utan att programmet �ndras.

Men det �r n�gra saker till som programmeraren beh�ver g�ra: Han beh�ver skapa katalogen, de f�rdefinierade str�ngarna, och lite k�llkod f�r att anv�nda str�ngarna (de funktioner som n�mns ovan). FlexCat har konstruerats f�r att g�ra detta p� ett enkelt och n�st intill automatiskt s�tt, utan att f�r den skull f�rlora flexibilitet n�r det g�ller skapandet av k�llkoden. Ett exempel f�r att f�rtydliga:

Antag att vi vill skriva ‘HelloLocalWorld.c’. V�rt slutliga program kommer att se ut s� h�r:

#include <stdio.h>
#include <stdlib.h>
/* Du m�ste inkludera den h�r filen! */
#include <HelloLocalWorld_Cat.h>

void main(int argc, char *argv[])
{
    printf("%s\n", msgHello);
}

Observera att detta �r mycket likt den ursprungliga ‘HelloWorld.c’, f�rutom att vi har ersatt str�ngen "Hello, world!" med konstanten msgHello.

Dessa konstanter och de relaterade str�ngarna definieras i en s� kallad katalogbeskrivning (see section katalogbeskrivning). Du b�rjar alltid med att skapa en s�dan fil, kallad ‘HelloLocalWord.cd’, som kan se ut s� h�r:

; Kommentarer kan naturligtvis anv�ndas! Varje rad som
; b�rjar med ett semikolon antas vara en kommentar.
;
; Spr�ket f�r de inbyggda str�ngarna:
#language english
;
; Katalogens version. Den anv�nd vid anropet av
; Locale/OpenCatalog(). Detta skiljer sig fr�n
; Exec/OpenLibrary(): 0 betyer vilken katalog som helst,
; medans andra nummer m�ste st�mma exakt!
#version 0
;
; Detta definierar en str�ng och det ID som anv�nds f�r att
; ange den. Talet 4 h�r s�ger att str�ngen inte f�r vara
; kortare �n 4 tecken.
msgHello (/4/)
Hello, world!

Genom att anv�nda FlexCat skapar du tv� filer utifr�n katalogbeskrivningen: Inkluderingsfilen ‘HelloLocaleWorld_Cat.h’, som definierar konstanterna, samt filen ‘HelloLocalWorld_Cat.c’, som inneh�ller en vektor med str�ngar samt n�gra initieringsfunktioner. Du beh�ver inte veta vad funktionerna g�r; anv�nd dem bara. Du beh�ver framf�r allt inte veta n�got om locale.library!

Du kanske �r intresserad av hur dessa filer ser ut, eller du kanske till och med vill modifiera dem. Det �r h�r skillanden mellan FlexCat och andra kataloggeneratorer m�rks: Med FlexCat �r du inte bunden till vissa inbyggda format p� dessa filer. Ist�llet anv�nder FlexCat externa mallfiler, s� kallade k�llkodsbeskrivningar. Detta g�r det m�jligt att till exmpel anv�nda kataloger med AmigaOS 2.0 (see section k�llkodsbeskrivning). Om du anv�nder k�llkodsbeskrivningar fr�n FlexCat-distributionen kan du skapa k�llkodsfiler med f�ljande kommandon:

FlexCat HelloLocalWorld.cd HelloLocalWorld_Cat.c=C_c.sd’
‘FlexCat HelloLocalWorld.cd HelloLocalWorld_Cat.h=C_h.sd

N�r ditt program �r klart, kan du anv�nda FlexCat f�r att skapa s� kallade katalog�vers�ttningar; en �vers�ttning f�r varje spr�k du vill st�dja (f�rutom det inbyggda spr�ket). See section katalog�vers�ttning. L�t oss skapa en tysk katalog�vers�ttning f�r v�rt exempelprogram:

FlexCat HelloLocalWorld.cd NEWCTFILE Deutsch.ct

Den h�r filen skulle nu se ut s� h�r:

## version
## language
## codeset 0
; Kommentarer kan naturligtvis anv�ndas! Varje rad som
; b�rjar med ett semikolon antas vara en kommentar.
;
; Spr�ket f�r de inbyggda str�ngarna:
;
; Katalogens version. Den anv�nd vid anropet av
; Locale/OpenCatalog(). Detta skiljer sig fr�n
; Exec/OpenLibrary(): 0 betyer vilken katalog som helst,
; medans andra nummer m�ste st�mma exakt!
;
; Detta definierar en str�ng och det ID som anv�nds f�r att
; ange den. Talet 4 h�r s�ger att str�ngen inte f�r vara
; kortare �n 4 tecken.
msgHello

;Hello, world!

Som du ser �r de mycket lika katalogbeskrivningar. FlexCat inkluderar kommentarerna i fr�n katalogbeskrivningen, �ven d�r de �r meningsl�sa: Observera kommentaren om str�ngl�ngden, som inte borde synas h�r, eftersom den informationen bara finns i katalogbeskrivningen.

Allt du beh�ver g�ra nu �r att fylla i informationen f�r versionen (i stil med ‘$VER: HelloLocalWorld.catalog 1.1 (25.8.97)’), spr�ket p� katalog�vers�ttningen (‘Deutsch’ f�r tyska i det h�r fallet), kodupps�ttningen (som alltid b�r vara 0 f�r tillf�llet; se Locale/OpenCatalog() f�r mer information) och naturligtvis str�ngen. FlexCat inkluderar den ursprungliga str�ngen som en kommentar, s� att du alltid vet som skall fyllas i. Slutligen skapar du katalogen med ett kommando som:

FlexCat HelloLocalWorld.cd Deutsch.ct CATALOG Deutsch.catalog

Observera att du inte beh�ver sj�lva programmet, eller k�llkodsfilerna som skapades med FlexCat, n�r du skapar katalogerna! Du kan skapa nya kataloger n�r som helst. Det �r vanligt att i distributioner skicka med en fil som FlexCat.ct, s� att anv�ndare kan g�ra sina egna �vers�ttningar.

Men vad h�nder om du �ndrar programmet senare? Redigera bara katalogbeskrivningen och anv�nd FlexCat f�r att uppdatera katalog�vers�ttningarna:

FlexCat HelloLocalWorld.cd Deutsch.ct NEWCTFILE Deutsch.ct

Allt du beh�ver g�ra nu �r att �vers�tta eventuella nya str�ngar.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2 Installation

FlexCat �r skrivet i ren ANSI-C (f�rutom lokaliseringen), s� det b�r fungera p� vilken Amiga som helst, och f�rhoppningsvis �ven p� andra datorer efter en omkompilering (lokaliseringen kommenteras bort i det fallet). Detta g�ller ocks� f�r de skapade programmen: FlexCat skrevs med sig sj�lv. All distribuerad k�llkodsbeskrivning b�r skapa program som kan k�ras p� vilken Amiga som helst, och �ven vilken dator som helst (naturligtvis m�ste du se till att variabeln LocaleBase har v�rdet NULL i det senare fallet). Lokalisering �r dock bara m�jligt med Workbench 2.1 och h�gre, eftersom locale.library inte finns tillg�ngligt i tidigare versioner av operativsystemet.

Det �r inte om�jligt att lokalisera ett program utan locale.library: K�llkodsbeskrivningarna ‘C_c_V20.sd’ och ‘C_h_V20.sd’ anv�nder iffparse.library (plus lite egen kod) ist�llet f�r locale.library, om locale.library inte �r tillg�ngligt. Detta g�r det m�jligt att lokalisera program som k�r under Workbench 2.0. See section C.

Att installera FlexCat �r enkelt: Kopiera bara programmet till en l�da i din kommandos�kv�g, och v�lj ett st�lle f�r de k�llkodsbeskrivningar du beh�ver (filer som heter n�got i stil med ‘xx_yy.sd’, d�r ‘xx’ �r programspr�ket). Du vill f�rmodligen s�tta milj�variabln FLEXCAT.PREFS eller FLEXCAT_SDDIR. See section programstart.

Om du vill anv�nda FlexCat i ett annat spr�k �n engelska beh�ver du kopiera motsvarande katalogfil. T.ex., f�r tyska, kopiera filen ‘Catalogs/Deutsch/FlexCat.catalog’ till ‘Locale:Catalogs/Deutsch/’ eller till ‘ProgDir:Catalogs/Deutsch/’, d�r ‘ProgDir:’ �r den l�da d�r FlexCat finns. See section att anv�nda FlexCat-k�llkod.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3 Anv�nda FlexCat i ett skal

FlexCat �r ett skalbaserat program, och kan inte anv�ndas fr�n Workbench. Syntaxen �r:

FlexCat CDFILE/A,CTFILE,CATALOG/K,NEWCTFILE/K,SOURCES/M,
        WARNCTGAPS/S,NOOPTIM/S,FILL/S,FLUSH/S,NOBEEP/S,
        NOLANGTOLOWER/S,NOBUFFEREDIO/S,MODIFIED/S,QUIET/S

Notera att FlexCat inte anv�nder de normala rutinerna f�r att tolka argumenten (f�r portabilitetens skull). Detta g�r framf�r allt att de enda nyckelod du kan (och m�ste) ange �r CATALOG och NEWCTFILE (de som �r av typen "/K"), de andra kan inte anges, d� de skulle tolkas som argument i sig. Detta kommer att �ndras, f�rmodligen i n�sta version.

I och med version 1.9 har FlexCat ett enkelt system f�r inst�llningar, som l�ter dig �ndra FlexCats normala beteende. See section inst�llningar.

Vad argumenten anv�nds till:

CDFILE

�r namnet p� den katalogbeskrivning som skall l�sas. Denna m�ste alltid anges. Observera att basnamnet f�r k�llkodsbeskrivningen skapas fr�n detta argument, vilket g�r det l�gesk�nsligt. See section k�llkodsbeskrivning.

CTFILE

�r namnet p� den katalog�vers�ttning som skall l�sas. Denna beh�vs n�r du skapar en katalog, eller n�r du uppdaterar en gammal katalog�vers�ttning via NEWCTFILE-argumentet: FlexCat l�ser den gamla �vers�ttningen samt katalogbeskrivningen och skapar en ny katalog�vers�ttning inneh�llande de gamla str�ngarna, och kanske n�gra tomma rader f�r de nya str�ngarna.

CATALOG

�r namnet p� den katalogfil som skall skapas. Detta argument kr�ver att CTFILE ocks� anges.

NEWCTFILE

�r namnet p� den katalog�vers�ttning som skall skapas. FlexCat l�ser str�ngarna fr�n CTFILE, om CTFILE angavs; str�ngar som saknas i katalog�vers�ttningen ers�tts med tomma rader. (Den nya katalog�vers�ttningen kommer bara att inneh�lla tomma rader som str�ngar om CTFILE inte anges.)

SOURCES

�r namnet p� de k�llkoder som skall skapas. Dessa anges i formatet ‘k�llkod=mall’, d�r ‘k�llkod’ �r filen som ska skapas, och ‘mall’ �r namnet p� den k�llkodsbeskrivning som ska l�sas.

Om k�llkodsbeskrivningen inte kunde hittas, f�rs�ker FlexCat �ppna en fil med samma namn i l�dan ‘ProgDir:lib’. (L�dan ‘lib’ i den l�da som FlexCat finns i.) Du kan �ndra denna f�rvalda l�da genom att s�tta milj�variabeln FLECCAT_SDDIR. Exempel:

FlexCat FlexCat.cd FlexCat_Cat.c=Templates/C_c_V20.sd

letar efter filen ‘Templates/C_c_V20.sd’ i den aktuella l�dan. Om denna fil inte kunde hittas, och milj�variablen FLEXCAT_SDDIR inte var definierad, letar FlexCat efter ‘ProgDir:lib/Templates/C_c_V20.sd’. Om FLEXCAT_SDDIR var definierad och inneh�ll till exempel ‘Work:FlexCat’, letar FlexCat efter ‘Work:FlexCat/Templates/C_c_V20.sd’.

WARNCTGAPS

Normalt sett varnar FlexCat inte om symboler saknas i katalog�vers�ttningen. Med denna flagga kan du f� FlexCat att visa s�dana varningar.

NOOPTIM

Om b�da str�ngarna (orginalet i #?.cd, och �vers�ttningen i #?.ct) �r likadana, s� antar FlexCat normalt sett att str�ngen inte beh�ver skrivas till katalogen, eftersom str�ngen d� kan tas fr�n de inbyggda str�ngarna ist�llet. Men om du av n�gon anledning vill att �ven dessa str�ngar skall skrivas (eller: om du vill att alla str�ngar skall skrivas), anv�nd NOOPTIM.

FILL

Denna finess �r mycket anv�ndbar f�r �vers�ttarna. N�r du arbetar p� en �vers�ttning kan en del str�ngar vara tomma, men du vill prova de �vers�ttningar du redan har gjort. Olyckligtvis s� skriver d� alla kataloggeneratorer tomma str�ngar, vilket skulle g�ra att t.ex. knappar blir tomma.

En flagga f�r att f�rbjuda tomma str�ngar �r inte en bra l�sning, eftersom du d� inte kan ha s�dana om det beh�vs. Dessutom, ett illa skrivet program kanske kr�ver att alla str�ngar finns i katalogen (�ven de tomma), t.ex. f�r att det inte finns n�gra inbyggda str�ngar. Genom att anv�nda FILL-flaggan kan du tvinga FlexCat att skriva orginalstr�ngarna (fr�n ‘#?.cd’-filen) varje g�ng den hittar en tom �vers�ttning, eller en �vers�ttning som inte finns.

OBS: Detta b�r bara anv�ndas f�r att prova �vers�ttningen. F�rdiga kataloger b�r alltid skapas utan n�gon FILL-flagga!

FLUSH

Denna flagga �r anv�ndbar n�r du �vers�tter och provar din �vers�ttning. Eftersom AmigaOS inte direkt tar bort kataloger (och bibliotek, teckensnitt, drivrutiner, etc.) fr�n minnet n�r de inte l�ngre anv�nds, kan du beh�va tvinga systemet att ta bort dem (t.ex. genom att anv�nda ‘C:Avail FLUSH’) varje g�ng du vill att den nyskapade katalogen skall l�sas fr�n disk (ist�llet f�r att kopian i minnet anv�nds). Om du anger den h�r flaggan n�r katalogen skapas, kommer FlexCat att ta bort alla oanv�nda saker fr�n minnet.

OBS: FLUSH fungerar bara n�r du skapar en katalog. Annars kommer den att ignoreras.

Example:

FlexCat Test.cd Test.ct CATALOG Test.catalog FLUSH
NOBEEP

I och med version 1.9 bl�nker FlexCat sk�rmen f�r att uppm�rksamma dig om problem som har p�tr�ffats. Detta kan vara mycket anv�ndbart n�r du anv�nver FlexCat fr�n en milj� utan en normal utmatning (t.ex. om du startar ett skript fr�n Opus eller ett annat program). Du kanske inte tycker om dessa bl�nkningar (fast FlexCat �r smart nog att bara bl�nka en g�ng, �ven om du f�r 20 varingar). I s� fall kan du anv�nda NOBEEP-flaggan f�r att st�nga av bl�nkandet.

NOLANGTOLOWER

Normalt konverterar FlexCat argumentet till #language till gemener genom att anv�nda en funktion i utility.library. Denna funktion anv�nder locale.library om det �r installerat, men tydligen finns det felaktiga �vers�ttningstabeller f�r n�gra spr�k (till exempel tjeckiska), vilket kan leda till en felaktig konvertering. Med den h�r flaggan kan du undvika problemet. Du b�r dock kontakta f�rfattaren av spr�kfilerna s� att dessa fel r�ttas, eftersom andra program kan drabbas av samma problem. Kom ih�g att bara anv�nda gemener f�r #language om du anv�nder den h�r flaggan (och anv�nd den bara om det �r absolut n�dv�ndigt).

NOBUFFEREDIO

FlexCat anv�nder buffrad IO. Detta kan g�ra FlexCat snabbare, men det �r inte s�kert. Du kan d� anv�nda den h�r flaggan f�r att anv�nda obuffrad IO. Anv�nd den bara om det �r n�dv�ndigt.

MODIFIED

Den h�r flaggan g�r att FlexCat bara skapar katalogen n�r n�gon av k�llfilerna, #?.cd och #?.ct, har �ndrats sedan katalogen senast kompilerades. N�r katalogen �r nyare �n k�llfilerna avslutar FlexCat utan att g�ra n�got. Den h�r flaggan �r anv�ndbar n�r du vill skapa en kommandofil f�r att kompilera flera kataloger p� en g�ng (till exempel f�r �vers�ttningen av stora program), och inte vill sl�sa tid p� att kompilera om kataloger som inte har �ndrats. (Detta �r allts� ett enklare alternativ till att anv�nda ett make-program.)

QUIET

S�ger �t FlexCat att h�lla tyst om det inte �r absolut n�dv�ndigt. Det betyder att du inte kommer att se n�gra varningar. Fel kommer att rapporteras som vanligt.

F�r fler exempel p� kommandorader, se �versikten.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4 �ndra FlexCats normala beteende

I och med version 1.9 har FlexCat ett enkelt system f�r inst�llningar. Genom att anv�nda milj�variabeln FLEXCAT.PREFS kan du �ndra programmets normala beteende.

Variabeln FLEXCAT.PREFS tolkas med dos.library:s ReadArgs()-funktion, och s�lunda skall alla argument anges p� en rad, d�r argumenten separeras med mellanslag. Mallen f�r inst�llningarna ser ut som f�ljer:

SDDIR/K,WARNCTGAPS/S,NOOPTIM/S,FILL/S,FLUSH/S,NOBEEP/S,QUIET/S

F�r mer information om dessa argument, See section programstart.

En kommentar ang�ende SDDIR: N�r k�llkoden skapas letar FlexCat f�rst i den aktuella l�dan, sedan i l�dorna som anges i inst�llningarna. Om detta fortfarande inte lyckas, l�ses FLEXCAT_SDDIR, och slutligen l�dan ‘ProgDir:lib/’. Genom att anv�nda b�de inst�llningsvariabeln och FLEXCAT_SDDIR kan du allts� anv�nda tv� egna l�dor f�r k�llkodsbeskrivningar samtidigt.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5 Katalogbeskrivningar

En katalogbeskrivning inneh�ller fyra olika sorters rader.

Kommentarsrader

En rad om b�rjar med ett semikolon antas vara en kommentarsrad, och ignoreras d�rmed. (Str�ngrader (se nedan) �r ett undantag. De kan b�rja med ett semikolon.)

Kommandorader

En rad som b�rjar med ett "#" (med samma undantag som ovan) antas vara kommandorader. F�ljande kommandon kan anv�ndas:

#language <str�ng>

anger programmets f�rvalda spr�k; det spr�k som anv�nds i katalogbeskrivningen. F�rvalt �r ‘#language english’.

#version <num>

anger versionsnumret f�r katalogen som skall �ppnas. Observera att detta nummer m�ste st�mma exakt, och inte vara samma eller h�gre, som f�r Exec/OpenLibrary. Undantaget �r 0, vilket godtar vilken katalogversion som helst. F�rvalt �r ‘#version 0’.

Se Locale/OpenCatalog f�r mer information om katalogspr�ket och versionen.

#lengthbytes <num>

S�ger �t FlexCat att placera det givna antalet tecken f�re en str�ng, inneh�llande str�ngens l�ngd. L�ngden �r det antal tecken str�ngen tar upp, f�rutom l�ngdtecknena och ett avslutande nolltecken. (Katalogfiler, och d�rmed katalogstr�ngar kommer att ha ett avslutande nolltecken. Detta �r inte alltid sant f�r de inbyggda str�ngarna, beroende p� hur k�llkodsbeskrivningen ser ut.) ‘<num>’ m�ste vara mellan 0 och sizeof( long ) = 4. F�rvalt �r ‘#lengthbytes 0’.

#basename <str�ng>

Anger basnamnet f�r programmet. See section k�llkodsbeskrivning. Denna str�ng anv�nds ist�llet f�r basnamnet fr�n kommandoradsargumentet CDFILE. See section programstart.

Kommandon �r l�gesk�nsliga.

Beskrivningsrader

deklarerar en str�ng. De ser ut som ‘IDSTR (id/minlen/maxlen)’, d�r ‘IDSTR’ �r en identifierare (en str�ng best�ende av tecknena a-z, A-Z 0-9, samt ‘_’); ‘id’ �r ett unikt nummer (h�rmed kallat ID) och ‘minlen’, samt ‘maxlen’ �r str�ngens minimala respektive maximala l�ngd. De tre sista talen beh�ver inte anges (men tecknena ‘(//)’ m�ste anges!), i vilket fall FlexCat v�ljer ett nummer, och s�tter inte n�gra begr�nsningar p� str�ngens l�ngd. Det �r b�st att inte ange n�gra ID-nummer om du inte absolut beh�ver det. Dessa rader f�ljs av

Str�ngrader

som inneh�ller str�ngen, och inget annat. Dessa str�ngaar kan inneh�lla vissa kontrolltecken, som b�rjar med ett bakstreck:

\b

Backsteg (ASCII 8)

\c

Kontrollsekvensstart (ASCII 155)

\e

Escape (ASCII 27)

\f

Sidmatning (ASCII 12)

\g

Bl�nk (ASCII 7)

\n

Radmatning (ASCII 10)

\r

Radretur (ASCII 13)

\t

Tab (ASCII 9)

\v

Vertikal tab (ASCII 11)

\)

Avslutande parantes, som kan beh�vas som en del av sekvensen ‘(..)’, se k�llkodsbeskrivning.

\\

Bakstreck

\xHH

Tecknet som anges av ASCII-koden ‘HH’, d�r ‘HH’ �r hexadecimala siffror.

\OOO

Tecknet som anges av ASCII-koden ‘OOO’, d�r ‘OOO’ �r oktala siffror.

Slutligen, ett ensamt bakstreck p� slutet av raden anger att str�ngen forts�tter p� n�sta rad. Detta g�r det m�jligt att ange str�ngar av godtycklig l�ngd; FlexCat g�r inte n�gra antanganden g�llande str�ngens l�ngd.

En str�ng anges allts� av en beskrivningsrad, samt den f�ljande str�ngraden. Ett exempel:

    msgHello (/4/)
    Hello, this is english!\n

ID-numret saknas h�r, s� FlexCat v�ljer ett l�mpligt nummer. Numret 4 s�ger �t FlexCat att den f�ljande str�ngen inte f�r ha f�rre �n fyra tecken, och att den i �vrigt kan ha godtycklig l�ngd. Se filen ‘FlexCat.cd’ f�r ytterligare exempel.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6 Katalog�vers�ttningar

Katalog�vers�ttningar p�minner mycket om katalogbeskrivningar, f�rutom att den inneh�ller andra kommandon, samt ingen information om str�ng-ID och l�ngd (dessa tas fr�n katalog�vers�ttningen). Alla str�ngar fr�n katalogbeskrivningen m�ste finnas med i �vers�ttningen (FlexCat undviker att skriva str�ngar som �r identiska med orginalet till katalogen), och inga fler identifierare f�r finnas med. Man kan enkelt f�rs�kra sig om detta genom att anv�nda FlexCat f�r att skapa nya katalog�vers�ttningar. See section �versikt.

De kommandon som till�ts i en katalog�vers�ttning �r:

##version <str�ng>

Anger katalogens version i form av en versionsstr�ng i AmigaDOS-format. Exempel:

##version $VER: FlexCat.catalog 8.2 (25.8.97)

Versionen p� denna katalog �r 8. S�lunda m�ste katalogbeskrivningens versionsnummer vara 0 eller 8.

Du kan ers�tta datumet (h�r ‘27.09.93’) med det speciella nyckelordet ‘$TODAY’. N�r katalogen skapas, kommer ‘$TODAY’ att ers�ttas med det aktuella datumet (observera att bara den f�rsta f�rekomsten av ‘$TODAY’ i ‘$VER’-str�ngen kommer att behandlas). Om du vill att dina kataloger alltid skall vara aktuella, ange allts�:

$VER: FlexCat.catalog 3.1 ($TODAY)
##rcsid $Date: <datum> <tid> $ $Revision: <rev> $
$Id: <namn> <datum> <tid> carlos Exp carlos $

kan anv�ndas tillsammans med ett revisionskontrollsystem ist�llet f�r ##version (allt skall givetvis vara p� en och samma rad). ‘<datum>’ �r datumet p� formen ‘��/mm/dd’, ‘<tid>’ �r tiden (ignoreras), ‘<rev>’ �r revisionen och ‘<namn>’ �r namnet som anv�nds i versionstr�ngen.

##name <namn>

finns med f�r kompatibilitet med CatComp. Det ers�tter ‘<namn>’-argumentet i ##rcsid-kommandot.

##language <str�ng>

Katalogens spr�k. Naturligtvis skall detta vara ett annat spr�k �n det som anv�nds i katalogbeskrivningen. Kommandona ‘##language’ och ‘##version’ m�ste finnas med i en katalog�vers�ttning.

##codeset <nummer>

Anv�nds f�r tillf�llet inte, och m�ste vara 0. Detta �r det f�rvalda v�rdet.

## chunk <ID> <str�ng>

L�gger till IFF-blocket ‘<ID>’ till katalogen, inneh�llande den angivna <str�ng>. Anv�nds oftast f�r att l�gga till en kommentar till en katalog. Exempel:

## chunk AUTH Tysk �vers�ttning av Jochen Wiedmann

Enligt ovanst�ende ser allts� v�rt exempel ut s� h�r i katalog�vers�ttningen:

    msgHello
    Hallo, dies ist deutsch!\n

Se ‘Deutsch.ct’ f�r ytterligare ett exempel p� en katalog�vers�ttning.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7 K�llkodsbeskrivningar

Detta �r den speciella delen av FlexCat. Hittils har det inte varit n�got som inte CatComp, KitCat och andra program ocks� kan g�ra. Den skapade k�llkoden g�r det enkelt att anv�nda kataloger, utan att f�r den skull f�rlora flexibilitet. Vilket programspr�k som helst b�r vara m�jligt att anv�nda, och alla behov borde kunna uppfyllas. Det l�ter kanske som en mots�gelse, men FlexCats l�sning p� detta problem �r k�llkodsbeskrivningarna, som inneh�ller en mall f�r hur k�llkoden skall skall se ut. Dessa kan redigeras p� samma s�tt som katalogbeskrivningar och katalog�vers�ttningar. Allts� kan FlexCat generera i princip godtycklig kod.

K�llkodsbeskrivningarna genoms�ks efter vissa speciella symboler, som ers�tts med vissa v�rden. M�jliga symboler �r bakstreckstecknena enligt ovan, och ytterligare sekvenser som b�rjar med ett ‘%’-tecken (detta �r v�lbekant f�r C-programmerare).

%b

�r basnamnet p� katalogbeskrivningen. See section programstart.

%v

�r versionsnumret p� katalogbeskrivningen. Blanda inte ihop detta med katalogversionen fr�n katalog�vers�ttningen.

%l

�r katalogbeskrivningens spr�k. Observera att detta matas in som en str�ng. Se ‘%s’ nedan.

%n

�r antalet str�ngar i katalogbeskrivningen.

%%

�r tecknet ‘%’.

De viktigaste �r f�ljande sekvenser. De representerar katalogstr�ngarna p� olika s�tt. Rader inneh�llande en eller flera av f�ljande symboler upprepas en g�ng f�r varje str�ng.

%i

�r identifieraren fr�n katalogbeskrivningen.

%nd
%nx
%nc

�r ID-numret f�r str�ngen i decimal, hexadecimal respektive oktal notation. Numret ‘n’ s�ger �t FlexCat hur m�nga tecken ID-numret skall anv�nda (str�ngen fylls med noll till v�nster till den �nskade l�ngden). Om du inte anger ‘n’ kommer ID-numret bara att anv�nda det antal tecken som beh�vs.

%e

�r numret p� den aktuella str�ngen. R�knaren b�rjar fr�n 0.

%s

�r str�ngen sj�lv. Hur denna skall matas in beror p� programspr�ket som anv�nds, och kan kontrolleras med kommandona ‘##stringtype’ och ‘##shortstrings’.

%na

�r str�ngens ID. Skillnaden mellan ‘%na’ och t.ex. ‘%nx’ �r att ‘%na’ genererar str�ngens ID separerad till enstaka tecken:

%2a’ i k�llkodsbeskrivningen resulterar i ‘\x00\x20

Om du inte anger ‘n’, kommer ID-numret att bli fyra tecken.

%nt

�r str�ngens l�ngd. Observera att det v�rdet alltid �r j�mnt.

%z

b�r anv�ndas tillsammans med ‘%nt’. Eftersom ‘%nt’ alltid resulterar i ett j�mnt v�rde, kan en beskrivningsrad som:

static const char Block[] =
{
     "%2a" "%2t" %s "%z"
};

orsaka problem, speciellt n�r man tolkar en s�dan tabell, eftersom ‘%2t’ kan vara j�mn, medans str�ngens l�ngd �r udda! N�r tabellen tolkas kan du l�sa eller hoppa �ver ett tecken f�r mycket (jag antar konsekvenserna �r k�nda). F�r att undvika detta introduerades ‘%z’. FlexCat ers�tter den med s� m�nga tecken (‘\x00’) som str�ngen saknar f�r att l�ngden skall bli j�mn. Om str�ngen �r tre tecken l�ng, ger ‘%nt’ ‘4’, och ‘%z’ l�gger till en ‘\x00’.

%(...)

matar in texten mellan paranteserna f�r varje str�ng utom den sista. Detta kan beh�vas i vektorer, om posterna i vektorn skall separeras med komma, men den sista posten inte f�r f�ljas av ett komma. Du kan anv�nda ‘(,)’ i s� fall. Observera att inom paranteser ers�tts inte n�gra ‘%’-sekvenser. Bakstrecksekvenser ers�tts dock fortfarande.

Kontrollsekvenserna ‘%l’ och ‘%s’ skapar str�ngar. Hur str�ngarna ser ut beror p� programspr�ket i fr�ga. D�rf�r kan man ha kommandorader i k�llkodsbeskrivningen liknande dem i t.ex. katalog�vers�ttningen. Dessa kommandon m�ste b�rja p� f�rsta positionen p� en rad, och det kan bara finnas ett kommando per rad. M�jliga kommandon �r:

##shortstrings

g�r s� att l�nga str�ngar delas upp p� flera raader. Detta �r inte alltid m�jligt, eller kanske inte implementerad FlexCat. S�lunda �r det normala att skapa en str�ng, som kanske �r mycket l�ng.

##stringtype <typ>

Talar om f�r FlexCat hur str�ngarna skall se ut. M�jliga typer �r:

None

Inga extra tecken; en ren kopia av str�ngen infogas, och inget annat. Bin�ra tecken (bakstegsekvenser) �r inte m�jliga.

C

skapar str�ngar i C-format. Str�ngarna f�reg�s och f�ljs av tecknet ‘"’. Str�ngar delas med ‘"\’ p� slutet av raden, och ‘"’ p� b�rjan av n�sta rad. (Baksteget beh�vs i makron.) Bin�ra tecken infogas som ‘\OOO’. See section C.

Oberon

ser ut som str�ngtypen C, utom det avslutande baksteget p� slutet av rader. See section Oberon. Denna str�ngtyp rekommenderas �ven f�r Modula-2.

Assembler

Str�ngas skapas med ‘dc.b’. L�sbara ASCII-tecken f�reg�s och f�ljs av tecknet ‘'’; bin�ra tecken infogas som ‘$XX’. See section assembler.

E

Str�ngar f�reg�s och f�ljs av tecknet ‘'’. Ett ‘+’-tecken binder samman str�ngar som har delats upp p� flera rader. Bin�ra tecken infogas som i C.

L�t oss se p� ett utdrag fr�n filen ‘C_h.sd’, som skapar en inkluderingsfil f�r programspr�ket C:

##stringtype C
##shortstrings

/* Se till att vi bara inkluderas en g�ng. */
#ifndef %b_CAT_H
#define %b_CAT_H

/* L�s andra inkluderingsfiler. */
#include <exec/types.h>
#include <libraries/locale.h>

/* Funktionsprototyper */
extern void Open%bCatalog( struct Locale *, STRPTR );
extern void Close%bCatalog( void );
extern STRPTR Get%bString( LONG );

/* Definitioner f�r identifierarna samt deras ID-nummer. */
/* Den h�r raden kommer att upprepas f�r varje str�ng.   */
#define %i %d

#endif

F�r den s�kv�g som anv�nds f�r k�llkodsbeskrivningar, se programstart.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8 Anv�nda k�llkoden i egna program

Hur du anv�nder k�llkoden beror naturligtvis p� vilken k�llkod som skapas, och d�rmed p� k�llkodsbeskrivningen som anv�nds. Vad vi talar om h�r �r de k�llkodsbeskrivningar som f�ljer med FlexCat. See section k�llkodbeskrivning.

Alla k�llkodsbeskrivningar borde g�ra det m�jligt att anv�nda programmen utan locale.library. En global variabel kallad ‘LocaleBase’ (‘_LocaleBase’ f�r assembler) m�ste dock finnas, och initieras med NULL eller med ett anrop till Exec/OpenLibrary. Lokalisering �r inte m�jlig om LocaleBase �r NULL, s�vida inte k�llkodsbeskrivningen ‘C_c_V20.sd’ anv�nds. Denna beskrivning m�jligg�r lokalisering under AmigaOS 2.0 genom att ers�tta locale.library med iffparse.library (plus lite egen kod). (En variabel kallad IFFParseBase m�ste finnas f�r att detta skall fungera, och den beh�ver initieras p� liknande s�tt som ‘LocaleBase’.) See section C. Programmeraren beh�ver inte veta hur dessa bibliotek anv�nds, utom n�r han skapar egna k�llkodsbeskrivningar.

Det finns tre funktioner, och de �r ganska enkla att anv�nda.

: OpenCatalog( locale, language )

Denna funktion �ppnar eventuellt en katalog. Argumentet locale �r en pekare till en Locale-struktur, och language �r en str�ng som inneh�ller namnet p� det spr�k f�r vilket en katalog skall �ppnas. I de flesta fall �r dessa b�da ‘NULL’ eller ‘NIL’, eftersom anv�ndarens val inte anv�nds annars. Se Locle/OpenCatalog f�r mer information.

Icke objektorienderade spr�k (C, assembler, Modula) anropar normalt sett funktionen OpenXXXCatalog, d�r XXX �r basnamnet p� applikationen: Detta l�ter dig anv�nda flera olika kataloger i ett och samma program.

Om anv�ndaren har ‘Deutsch’ och ‘Fran�ais’ som de f�rvalda spr�ken, och programmets basnamn �r ‘XXX’, s� letar programmet efter f�ljande filer:

ProgDir:Catalogs/Deutsch/XXX.catalog’
‘Locale:Catalogs/Deutsch/XXX.catalog’
‘ProgDir:Catalogs/Fran�ais/XXX.catalog’
‘Locale:Catalogs/Fran�ais/XXX.catalog

d�r ‘ProgDir:’ �r den l�da d�r programmet finns. (Ordningen mellan ‘ProgDir:’ och ‘Locale:’ kan �ndras f�r att undvika en dialogruta i stil med ‘Mata in disketten YYY’.)

OpenCatalog �r av typen void (en procedur f�r Pascal-programmerare), och returnerar d�rmed inte n�got v�rde.

: GetString( ID )

Returnerar en pekare till den str�ng som motsvaras av det givna ID:n i katalogbeskrivningen. Dessa str�ngar �gs av locale.library, och f�r inte modifieras.

Ett exempel kan vara anv�ndbart. Ta str�ngen fr�n exemplet med katalogbeskrivningen, som kallades msgHello. K�llkodsbeskrivningen deklarerar konstanten ‘msgHello’, som representerar str�ngen. Denna str�ng kan skrivas ut i C med:

printf( "%s\n", GetString( msgHello ) );
: CloseCatalog()

Den h�r funktionen friar katalogen (allts� det allokerade minnet) innan programmet avslutas. Du kan anropa den h�r funktionen n�r som helst, �ven f�re OpenCatalog anropas.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.1 FlexCat-k�llkod i C-program

C-k�llkoden best�r av tv� delar: En ‘.c’-fil som skall kompileras och anv�ndas som den �r, samt en inkluderingsfil som ska inkluderas i alla k�llkodsfiler som anv�nder katalogstr�ngar. Denna inkluderingsfil definierar alla str�ngars ID:n som makron.

De C-kompilatorer jag kan (SAS/C, DICE och GCC) kan automatiskt �ppna bibliotek och initiera katalogerna. Du beh�ver allts� inte anropa funktionerna OpenCatalog och CloseCatalog; kompilatorn g�r det �t dig. Dessutom anropar OpenCatalog GetString-funktionen f�r alla katalogstr�ngar. Detta g�r att du helt enkelt kan skriva ‘msgHello’ ist�llet f�r ‘GetString( msgHello )’.

Om du definierar symbolen LOCALIZE_V20 (‘-D LOCALIZE_V20’ f�r DICE och GCC; ‘DEF LOCALIZE_V20’ f�r SAS/C), kommer du att f� ett program som kan anv�nda kataloger under OS 2.0: locale.library ers�tts med iffparse.library i s� fall. Ditt program beh�ver d� �ven ett argument som ‘LANGUAGE’, s� att anv�ndaren kan ange vilket spr�k som skall anv�ndas. Funktionen InitXXXCatalog (d�r ‘XXX’ �r basnamnet p� ditt program) beh�ver anropas, med argumentet fr�n ‘LANGUAGE’ som parameter. Denna parameter ignoreras naturligtvis om du har locale.library. (Det vore m�jligt att g�ra liknande saker under OS 1.3, men jag vill inte st�dja denna f�r�ldrade version l�ngre.)

Du f�rlorar lite funktionalitet med denna k�llkodsbeskrivning: Till exempel kan du inte skicka med en Locale-struktur till OpenCatalog. De allra flesta programmen kommer dock inte att sakna n�got; andra beh�ver modifiera k�llkodsbeskrivningen.

F�r ett exempel p� ett program som anv�nder dessa k�llkodsbeskrivningen, se �versikten.

OBS:

I och med version 1.9 inneh�ller arkivet k�llkodsbeskrivningen ‘CatComp_h.sd’, som kan anv�ndas av program som anv�nder mer �n en katalog. Se den filen f�r hur du kan uppdatera de andra k�llkodsbeskrivningarna.

Det finns ocks� en ny k�llkodsbeskrivning av Magnus Holmgren <cmh@lls.se>. Filerna ‘Cat2h_c.sd’ och ‘Cat2h_h.sd’ inneh�ller k�llkodsbeskrivningar som genererar kod liknande den som genereras av Cat2h av Nico Fran�ois (och �ven av Cat2Inc av Magnus Holmgren ;). Den anv�nder ett lite annorlunda s�tt f�r att hantera str�ngar, som �r kompakt och snabbt.

Ist�llet f�r att lagra alla str�ngar i en vektor, och s�ka igenom denna varje g�ng (som CatComp normalt sett g�r; man kan undvika detta dock), lagras str�ngens ID i de tv� f�rsta tecknena av str�ngen. GetString()-funktionen, som d� allts� tar en str�ng som argument, l�ser de tv� f�rsta tecknena till ett l�ngord, och d�rmed �r str�ngens ID och den inbyggda str�ngen k�nda.

I och med version 1.9 kan FlexCat generera den h�r sortens kod, via kommandot %a. De inkluderade filerna anv�nder %2a, och anv�nder allts� bara tv� byte f�r ID-nummer per string (som Cat2h g�r). Detta torde r�cka f�r de flesta program. Om du �ndrar l�ngden, kom ih�g att GetString()-funktionen ocks� beh�ver �ndras.

Den genererade inkluderingsfilen definierar alla str�ngar, och k�llkodsfilen inneh�ller kod f�r att �ppna och st�nga katalogen (med automatisk initiering f�r SAS/C och DICE), och en l�mplig GetString()-funktion. En snabb titt p� den genererade koden borde vara nog f�r att se alla detaljer, tycker jag.

Koden st�djer f�r tillf�llet inte flera kataloger, ej eller �ndring av versionsnummer eller inbyggt spr�k. Enkelt att l�gga till dock, om behovet skulle uppst�.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.2 FlexCat-k�llkod i C++-program.

Att anv�nda FlexCat-k�llkod i C++-program �r mycket enkelt: N�stan allt g�rs av en speciell klass, som implementeras i filerna ‘C++_CatalogF.cc’ och ‘C++_CatalogF.h’. All du beh�ver g�ra �r att d�pa om dessa filer till ‘CatalogF.cc’ och ‘CatalogF.h’, kompilera dem, och skapa ytterligare tv� filer genom att anv�nda k�llkodsbeskrivningarna ‘C++_cc.sd’ och ‘C++_h.sd’. Den f�rsta skapar filen med str�ngarna (som naturligtvis ocks� m�ste kompileras), och den andra filen kommer att inkluderas i ditt program. Ett C++-program som anv�nder FlexCat-k�llkod kan se ut s� h�r:

#include <iostream.h>
extern "C"
{
#include <clib/exec_protos.h>
}
#include "CatalogF.h"
#include "HelloLocalWorld_Cat.h"

struct LocaleBase *LocaleBase = 0;

int main()
{ // Du m�ste �ppna bibliteket h�r, �ven om din kompilator
   // st�djer automatisk �ppning: Det kommer vanligtvis att
   // avsluta programmet om locale.library inte kunde �ppnas.
   // Det �r inte vad vi vill h�r, eftersom vi d� kommer att
   // anv�nda de inbyggda str�ngarna ist�llet.
   LocaleBase = ( struct LocaleBase * )
       OpenLibrary( "locale.library", 38 );

   const CatalogF cat( 0, 0, HelloLocalWorld_ARGS );

   cout >> cat.GetString( msgHelloLocalWorld );

   if (LocaleBase)
       CloseLibrary(LocaleBase);
}

En modifiering av GCCs ‘libauto.a’ finns tillg�nglig, som l�ter dig ta bort raderna som g�ller variabeln LocaleBase.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.3 FlexCat-k�llkod i Oberon-program

Det finns n�gra olika k�llkodsbeskrivningar: ‘AmigaOberon.sd’ �r gjord f�r den aktuella versionen av kompilatorn AmigaOberon. ‘Oberon_V39.sd’ �r f�r �ldre versioner, och ‘Oberon_V38.sd’ anv�nder filen ‘Locale.mod’ fr�n Hartmut Goebel. ‘Oberon-A.sd’ �r, naturligtvis, f�r Oberon-A.

Funktionsprototyperna �r:

XXX.OpenCatalog(loc: Locale.LocalePtr; language : ARRAY OF CHAR);
XXX.GetString(num: LONGINT): Exec.StrPtr;
XXX.CloseCatalog();

d�r ‘XXX’ �r basnamnet fr�n k�llkodsbeskrivningen. See section k�llkodsbeskrivning.

Till slut ett exempel p� hur man anv�nder FlexCat-k�llkoden:

MODULE HelloLocalWorld;

IMPORT  x:=HelloLocalWorld_Cat; Dos;

BEGIN
    x.OpenCatalog(NIL, "");

    Dos.PrintF("%s\n", x.GetString(x.msgHello));

    (* Katalogen kommer automatiskt att st�ngas *)
    (* n�r programmet avslutas.                 *)
END Anything;

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.4 FlexCat-k�llkod i Modula-2-program.

Modula-2 har ett modulkoncept liknande det i Oberon. Detta betyder att funktionsnamnen �r alltid samma. Till skillnad fr�n Oberon beh�ver dock Modula-2 en implementations- och en deklarationsmodul. D�rf�r beh�ver du skapa tv� filer, genom att anv�nda k�llkodsbeskrivningarna ‘Modula2Def.sd’ och ‘Modula2Mod.sd’. Dessa �r anpassade f�r kompilatorn M2Amiga. Observera att du �ven beh�ver filen ‘OptLocalL.def’ fr�n version 4.3 av M2Amiga.

Funktionsprototyperna �r:

PROCEDURE XXX.OpenCatalog(loc : ld.LocalePtr;
                          language : ARRAY OF CHAR);
PROCEDURE XXX.CloseCatalog();
PROCEDURE XXX.GetString(num : LONGINT) : ld.StrPtr;

d�r ‘XXX’ �r basnamnet fr�n k�llkodsbeskrivningen. See section k�llkodsbeskrivning.

Till slut ett exempel p� hur man anv�nder FlexCat-k�llkoden:

MODULE HelloLocalWorld;

IMPORT hl: HelloLocalWorldLocale,
       io: InOut;

BEGIN
    hl.OpenCatalog(NIL, "");

    io.WriteString(hl.GetString(hl.msgHello)); io.WriteLn;

    hl.CloseCatalog;
END HelloLocalWorld.

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.5 FlexCat-k�llkod i assemblerprogram

Assemblerk�llkoden har gjorts f�r att anv�ndas med Aztec-assemblern. Denna b�r dock inte skilja sig s� mycket fr�n andra assemblatorer, och du b�r kunna g�ra egna k�llkodsbeskrivningar. K�llkoden best�r av tv� delar: En ‘.asm’-fil, som assembleras och l�nkas, samt en ‘.i’-fil, som definierar str�ngarnas ID, och m�ste inkluderas av de moduler som anv�nder dem.

Funktionsnamnen har �ndrats lite f�r att till�ta anv�ndandet av olika kataloger i en fil: Dessa �r ‘OpenXXXCatalog’, ‘CloseXXXCatalog’ och ‘GetXXXString’, d�r ‘XXX’ �r basnamnet fr�n k�llkodsbeskrivningen. Konceptet har kopierats fr�n GadToolsBox, och har visat sig fungera bra. See section k�llkodsbeskrivning.

Som vanligt returneras funktionsresultatet i d0, och funktionerna �ndrar inte p� registrena d2-d7 och a2-a7. OpenCatalog f�rv�ntar sig sina argument i a0 (en pekare till Locale-strukturen) och a1 (en pekare till spr�kstr�ngen), vilka f�r det mesta �r NULL. GetString f�rv�ntar sig en pekare i a0. Du beh�ver inte bry dig om vad den pekar p�.

Till slut ett exempel p� hur man anv�nder FlexCat-k�llkoden:

* HelloLocalWorld.asm

        include "XXX.i" ; Du m�ste inkludera denna. Den inneh�ller
                        ; "xref OpenHelloLocalWorldCatalog", ...

        xref    _LVOOpenLibrary
        xref    _LVOCloseLibrary
        xref    _AbsExecBase

        dseg

LocNam: dc.b    "locale.library",0
        dc.l    _LocaleBase,4       ; M�ste finnas med detta namn.

        cseg

main:   move.l  #38,d0              ; �ppna locale.library
        lea     LocName,a1
        move.l  _AbsExecBase.a6
        jsr     _LVOOpenLibrary(a6)

* Avsluta INTE, om OpenLibrary misslyckas

        sub.l   a0,a0               ; �ppna katalogen
        sub.l   a1,a1
        jsr     OpenHelloLocalWorldCatalog

        lea.l   msgHello,a0         ; H�mta en pekare till str�ngen
        jsr     GetHelloLocalWorldString
        jsr     PrintD0             ; och skriv ut str�ngen

Ende:
        jsr     CloseHelloLocalWorldCatalog ; St�ng katalogen
        move.l  _LocaleBase,a1      ; St�ng locale.library
        move.l  a1,d0               ; Denna test m�ste g�ras under 1.3
        beq     Ende1

        jsr     CloseLibrary
Ende1:
        rts
        end

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.6 FlexCat-k�llkod i E-program

I och med version 3.0 kan ett E-program delas upp i moduler. Den f�ljande beskrivningen beskriver hur ‘E30b.sd’ anv�nds, som fungerar med E version 3.0b eller h�gre. (Version 3.0a hade allvarliga fel; f�r tidigare versioner kan man anv�nda ‘E21b.sd’, vilket kr�ver att man manuellt infogar den genererade koden i den egna koden.)

E30b.sd’ skapar en modul som heter ‘Locale’, som inneh�ller en variabel, cat, av typen ‘catalog_XXX’, d�r ‘XXX’ �r basnamnet fr�n k�llkodsbeskrivningen. See section k�llkodsbeskrivning. Filen ‘HelloLocalWorld.e’ kan se ut n�got s�dant h�r:

MODULE '*Locale'
    -> Anv�nd den h�r modulen.

DEF cat : PTR TO catalog_HelloLocalWorld
    -> Den h�r variablen inneh�ller alla str�ngarna i
    -> katalogen, samt n�gra metoder. Du m�ste deklarera
    -> den i alla moduler som anv�nder lokalisering, men
    -> initiera den bara i huvudmodulen.

PROC main()
    localebase := OpenLibrary('locale.library', 0)
        -> �ppna locale.library; avsluta inte om den
        -> inte kunde �ppnas: Vi kommer att anv�nda de
        -> inbyggda str�ngarna i s� fall.

    NEW cat.create()
    cat.open()
        -> Som redan har n�mnts, detta skall bara g�ras i
        -> huvudmodulen.

    WriteF('\s\n', cat.msg_Hello_world.getstr())
        -> cat.msg_Hello_world �r en av de str�ngar som
        -> finns i cat. Den h�r str�ngen deklarerar en
        -> metod, getstr(), som l�ser katalogen och
        -> returnerar en pekare till den lokaliserade
        -> str�ngen.

    cat.close()
    IF localebase THEN CloseLibrary(localebase)
ENDPROC

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.7 St�d f�r flera kataloger

De flesta k�llkodsbeskrivningar som �r tillg�ngliga f�r tillf�llet kan inte anv�ndas i program som �ppnar mer �n en katalog. I senare distributioner kommer detta s�kerligen att �ndras, och uppdaterade k�llkodsbeskrivningar kommer att vara en del av de distributionerna.

F�r tillf�llet f�ljer det med ett exempel av en s�dan k�llkodsbeskrivning. Se ‘CatComp_h.sd’ f�r att se hur beskrivningen kan justeras f�r att undvika att f� flera symboler med samma namn och liknande. Med n�gra f� ord: Anv�nd ‘%b’ som prefix, suffix eller infix i varje namn som �r en viktig del av k�llkoden (och som dessutom �r globalt synliga). Om din tabell med str�ngar heter ‘String’, ers�tt den med ‘%b_Strings’, och du kommer inte l�ngre att f� flera symboler med samma namn.

CatComp_h.sd’ producerar k�llkod som liknar den som CatComp genererar, och kan anv�ndas av de som vill anv�nda FlexCat, men inte vill n�mnv�rt �ndra sina program.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Vidare utveckling av FlexCat

�ven om FlexCat verkar vara s� gott som klart, har jag n�gra poster kvar p� min "att g�ra" lista. Och jag �r naturligtvis �ppen f�r f�rslag, tips eller kritik. Speciellt kan jag l�gga till nya str�ngtyper, eftersom detta kan g�ras med mycket sm� �ndringar.

Jag vore mycket tacksam om n�gon skickade mig nya k�llkodsbeskrivningar och om jag kunde inkludera dem i framtida distributioner. Vilket programspr�k som helst, och vilka ut�kningar som helst, under f�ruts�ttning att de har visat sig fungera bra genom tester i riktiga program. Se support f�r kontaktadresser.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

FlexCat-support

F�r programuppdateringar, bes�k hemsidan f�r FlexCat vid:

http://amiga.com.pl/flexcat/

Om du har n�gra f�rslag eller felrapporter, skicka e-post till:

carlos@amiga.com.pl

eller via vanlig post:

Marcin Orlowski
ul. Radomska 38
71-002 Szczecin
Poland

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Tack till

Jochen Wiedmanns tack g�r till:

Albert Weinert

f�r KitCat, f�reg�ngaren till FlexCat, som har gjort v�rdefulla saker f�r mig, men till slut inte var flexibel nog, samt f�r k�llkodsbeskrivningen f�r Oberon.

Reinhard Spisser und Sebastiano Vigna

f�r Amiga-versionen av TexInfo, som anv�ndes f�r den h�r dokumentationen.

The Free Software Foundation

f�r den ursprungliga versionen av TexInfo, och m�nga andra utm�rkta program.

Matt Dillon

f�r DICE och speciellt DME.

Alessandro Galassi

f�r den italienska �vers�ttningen.

Lionel Vintenat

f�r k�llkodsbeskrivningen f�r E samt dess dokumentation, den franska �vers�ttningen, samt f�r felrapporter.

Antonio Joaqu�n Gomez Gonzalez (u0868551@oboe.etsiig.uniovi.es)

f�r k�llkodsbeskrivningen f�r C++, den spanska �vers�ttningen av b�de program och manual, och f�r det mycket bra f�rslaget f�r att snabba upp GetString-funktionen.

Olaf Peters (op@hb2.maus.de)

f�r k�llkodsbeskrivningen f�r Modula-2.

Russ Steffen (steffen@uwstout.edu)

f�r att ha f�reslagit FLEXCAT_SDDIR-variabeln.

Lauri Aalto (kilroy@tolsun.oulu.fi)

f�r den finska �vers�ttningen.

Marcin Orlowski (carlos@inet.com.pl)

f�r den polska �vers�ttningen, och f�r underh�llet av det polska locale-paketet.

Udo Schuermann (walrus@wam.umd.edu)

f�r att ha f�reslagit WARNCTGAPS-flaggan och ##chunk-kommandot.

Christian Hoj (cbh@vision.auc.dk)

f�r die d�nische Quelltextbeschreibung

Personerna p� #AmigaGer

f�r att ha svarat p� m�nga dumma fr�gor, och f�r mycket roligt. Till exempel stefanb (Stefan Becker), PowerStat (Kai Hoffmann), ill (Markus Illenseer), Quarvon (J�rgen Lang), ZZA (Bernhard M�llemann), Tron (Mathias Scheler), mungo (Ignatios Souvlatzis), jow (J�rgen Weinelt) och Stargazer (Petra Zeidler).

Commodore

f�r Amiga och Kickstart 2.0. Forts�tt utveckla Amigan, och jag kommer att vara en Amiga-anv�ndare f�r de n�sta �tta �ren ocks�. ;-)

Marcins tack g�r till:

Jochen Wiedmann

f�r att ha skapat FlexCat.

Magnus Holmgren <cmh@lls.se>

f�r k�llkodsbeskrivningen Cat2h.

Medlemmar i Amiga Translators’ Organization <http://ato.vapor.com/ato/>

f�r att ha skapat nya �vers�ttningar, och uppdaterat existerande �vers�ttningar:

Serbiska

av Ljubomir Jankovic <lurch@afrodita.rcub.bg.ac.yu>.

Tjeckiska

av Vit Sindlar <xsindl00@stud.fee.vutbr.cz>.

Svenska

av Magnus Holmgren <cmh@lls.se> och Hjalmar Wikholm <hjalle@canit.se>.

Finska

uppdaterad av Mika Lundell <c71829@uwasa.fi>.

Italienska

omarbetad av Luca Nora <ln546991@silab.dsi.unimi.it> och Giovanni Addabbo <gaddabbo@imar.net>.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9 Utveklingshistoria

Utvecklingshistorien f�r FlexCat finns i filen ‘FlexCat.history’, som �r en del av distributionsarkivet.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Index

Jump to:   .      
A   B   C   D   E   F   H   I   K   M   N   O   Q   S   T   W  
Index Entry  Section

.
.cd 5 Katalogbeskrivningar
.ct 6 Katalog�vers�ttningar
.sd 7 K�llkodsbeskrivningar

�ndringar 9 Utveklingshistoria

�versikt 1 �versikt

A
AmigaOberon 8.3 FlexCat-k�llkod i Oberon-program
Anv�nda k�llkoden 8 Anv�nda k�llkoden i egna program
ASCII-kod 5 Katalogbeskrivningar
Assembler 8.5 FlexCat-k�llkod i assemblerprogram
AutoC_c.sd 8.1 FlexCat-k�llkod i C-program
AutoC_h.sd 8.1 FlexCat-k�llkod i C-program
AztecAs_asm.sd 8.5 FlexCat-k�llkod i assemblerprogram
AztecAs_i.sd 8.5 FlexCat-k�llkod i assemblerprogram

B
Bidrag Vidare utveckling av FlexCat

C
C 8.1 FlexCat-k�llkod i C-program
C++ 8.2 FlexCat-k�llkod i C++-program.
C++_CatalogF.cc 8.2 FlexCat-k�llkod i C++-program.
C++_CatalogF.h 8.2 FlexCat-k�llkod i C++-program.
C++_cc.sd 8.2 FlexCat-k�llkod i C++-program.
C++_h.sd 8.2 FlexCat-k�llkod i C++-program.
Cat2h_c.sd 8.1 FlexCat-k�llkod i C-program
Cat2h_h.sd 8.1 FlexCat-k�llkod i C-program
CATALOG 3 Anv�nda FlexCat i ett skal
Catcomp_h.sd 8.1 FlexCat-k�llkod i C-program
CatComp_h.sd 8.7 St�d f�r flera kataloger
CDFILE 3 Anv�nda FlexCat i ett skal
CLI 3 Anv�nda FlexCat i ett skal
CTFILE 3 Anv�nda FlexCat i ett skal
C_c_V20.sd 8.1 FlexCat-k�llkod i C-program
C_c_V21.sd 8.1 FlexCat-k�llkod i C-program
C_h.sd 8.1 FlexCat-k�llkod i C-program

D
Deutsch.ct 6 Katalog�vers�ttningar

E
E 8.6 FlexCat-k�llkod i E-program
E21b.sd 8.6 FlexCat-k�llkod i E-program
E30b.sd 8.6 FlexCat-k�llkod i E-program

F
FILL 3 Anv�nda FlexCat i ett skal
FlexCat Vidare utveckling av FlexCat
FlexCat-k�llkod 8 Anv�nda k�llkoden i egna program
FlexCat.cd 5 Katalogbeskrivningar
flexcat.prefs 4 �ndra FlexCats normala beteende
FLUSH 3 Anv�nda FlexCat i ett skal
Framtid Vidare utveckling av FlexCat

H
Historia 9 Utveklingshistoria

I
Installation 2 Installation
Inst�llningar 4 �ndra FlexCats normala beteende

K
Katalogbeskrivning 5 Katalogbeskrivningar
Katalog�vers�ttning 6 Katalog�vers�ttningar
Kontrolltecken 5 Katalogbeskrivningar
K�llkodsbeskrivning 7 K�llkodsbeskrivningar

M
MODIFIED 3 Anv�nda FlexCat i ett skal
Modula-2 8.4 FlexCat-k�llkod i Modula-2-program.
Modula2Def.sd 8.4 FlexCat-k�llkod i Modula-2-program.
Modula2Mod.sd 8.4 FlexCat-k�llkod i Modula-2-program.

N
NEWCTFILE 3 Anv�nda FlexCat i ett skal
NOBEEP 3 Anv�nda FlexCat i ett skal
NOBUFFEREDIO 3 Anv�nda FlexCat i ett skal
NOLANGTOLOWER 3 Anv�nda FlexCat i ett skal
NOOPTIM 3 Anv�nda FlexCat i ett skal

O
Oberon 8.3 FlexCat-k�llkod i Oberon-program
Oberon-A 8.3 FlexCat-k�llkod i Oberon-program
Oberon_V38.sd 8.3 FlexCat-k�llkod i Oberon-program
Oberon_V39.sd 8.3 FlexCat-k�llkod i Oberon-program

Q
QUIET 3 Anv�nda FlexCat i ett skal

S
Skal 3 Anv�nda FlexCat i ett skal
SOURCES 3 Anv�nda FlexCat i ett skal
Support FlexCat-support
Systemkrav. 2 Installation

T
Tack till Tack till

W
WARNCTGAPS 3 Anv�nda FlexCat i ett skal
Workbench 3 Anv�nda FlexCat i ett skal

Jump to:   .      
A   B   C   D   E   F   H   I   K   M   N   O   Q   S   T   W  

[Top] [Contents] [Index] [ ? ]

Table of Contents


[Top] [Contents] [Index] [ ? ]

About This Document

This document was generated on April 14, 2022 using texi2html 5.0.

The buttons in the navigation panels have the following meaning:

Button Name Go to From 1.2.3 go to
[ << ] FastBack Beginning of this chapter or previous chapter 1
[ < ] Back Previous section in reading order 1.2.2
[ Up ] Up Up section 1.2
[ > ] Forward Next section in reading order 1.2.4
[ >> ] FastForward Next chapter 2
[Top] Top Cover (top) of document  
[Contents] Contents Table of contents  
[Index] Index Index  
[ ? ] About About (help)  

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:


This document was generated on April 14, 2022 using texi2html 5.0.